package com.xuetang.service;

import java.util.List;
import java.util.Map;

import com.xuetang.entity.Article;
import com.xuetang.entity.ArticleCategory;

/**
 * 文章服务接口
 */
public interface ArticleService {

    /**
     * 保存文章
     */
    Article saveArticle(Article article, List<String> tags);

    /**
     * 根据ID查询文章
     */
    Article getArticleById(Long id);

    /**
     * 根据ID查询文章（包含用户是否收藏状态）
     */
    Article getArticleWithFavoriteStatus(Long id, Long userId);

    /**
     * 删除文章
     */
    boolean deleteArticle(Long id);

    /**
     * 分页查询文章列表
     */
    Map<String, Object> getArticleList(Integer page, Integer size, String category, String keyword);

    /**
     * 获取推荐文章列表
     */
    List<Article> getRecommendedArticles(Integer limit);

    /**
     * 获取热门文章列表
     */
    List<Article> getHotArticles(Integer limit);

    /**
     * 增加文章浏览量
     */
    boolean incrementViewCount(Long id);

    /**
     * 点赞文章
     */
    boolean likeArticle(Long id);

    /**
     * 收藏/取消收藏文章
     */
    boolean toggleFavorite(Long articleId, Long userId);

    /**
     * 查询用户收藏的文章列表
     */
    Map<String, Object> getUserFavoriteArticles(Long userId, Integer page, Integer size);

    /**
     * 查询用户是否收藏了某篇文章
     */
    boolean isArticleFavorited(Long articleId, Long userId);

    /**
     * 获取文章分类列表
     */
    List<ArticleCategory> getCategories();

    /**
     * 保存文章分类
     */
    ArticleCategory saveCategory(ArticleCategory category);

    /**
     * 删除文章分类
     */
    boolean deleteCategory(Long id);

    /**
     * 根据分类查询文章列表
     */
    Map<String, Object> getArticlesByCategory(String category, Integer page, Integer size);

    /**
     * 搜索文章
     */
    Map<String, Object> searchArticles(String keyword, Integer page, Integer size);

    /**
     * 获取所有标签
     */
    List<String> getAllTags();
}